[#146] 뷰모델의 State 구조체가 Equatable을 채택하도록 개선한다#174
Conversation
opficdev
commented
Mar 3, 2026
- closed 뷰모델의 State에 Equtable을 일괄 채택한다 #146
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 PR은 뷰모델의 Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
이번 풀 리퀘스트는 뷰모델의 State 구조체에 Equatable 프로토콜을 채택하고, 상태 변경 시 이전 상태와 비교하여 실제 변경이 있을 때만 업데이트하도록 개선했습니다. 이는 불필요한 UI 업데이트를 방지하여 성능을 최적화하고, 상태 관리의 정확성을 높이는 좋은 접근 방식입니다. 또한, PushNotificationListViewModel과 TodoListViewModel에서 pendingTask와 nextCursor와 같은 내부적인 상태 관리 변수들을 State 구조체에서 분리하여 뷰모델 자체의 private 프로퍼티로 옮긴 점은 뷰모델의 책임과 State의 역할을 명확히 구분하는 훌륭한 리팩토링입니다. 전반적으로 코드의 품질과 효율성을 향상시키는 변경사항입니다.
I am having trouble creating individual review comments. Click here to see my feedback.
DevLog/Domain/Entity/TodoQuery.swift (10)
TodoQuery 구조체에 Equatable을 채택하여 State 구조체들이 자동으로 Equatable을 준수할 수 있도록 한 점은 훌륭합니다. 이는 뷰모델의 상태 비교 로직을 간결하게 유지하는 데 도움이 됩니다.
DevLog/Presentation/ViewModel/AccountViewModel.swift (12)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/AccountViewModel.swift (90)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/LoginViewModel.swift (15)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/LoginViewModel.swift (79)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/ProfileViewModel.swift (12)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/ProfileViewModel.swift (188)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (12)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (21)
pendingTask를 State에서 제거하고 뷰모델의 private 프로퍼티로 옮긴 것은 State의 역할을 UI 관련 상태로 명확히 하고, 뷰모델의 내부 로직을 분리하는 좋은 리팩토링입니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (59)
pendingTask를 뷰모델의 private 프로퍼티로 선언하여 State와 내부 로직을 분리한 점은 훌륭합니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (102)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (161)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (166)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (178)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (180)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (221)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (224)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (225)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift (248)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/PushNotificationSettingsViewModel.swift (12)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/PushNotificationSettingsViewModel.swift (102)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/RootViewModel.swift (13)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/RootViewModel.swift (92)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/SearchViewModel.swift (13)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/SearchViewModel.swift (127)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/SettingViewModel.swift (13)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/SettingViewModel.swift (98)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/TodoDetailViewModel.swift (12)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/TodoDetailViewModel.swift (73)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/TodoEditorViewModel.swift (13)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/TodoEditorViewModel.swift (114)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (12)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (28-29)
nextCursor와 pendingTask를 State에서 제거하고 뷰모델의 private 프로퍼티로 옮긴 것은 State의 역할을 UI 관련 상태로 명확히 하고, 뷰모델의 내부 로직을 분리하는 좋은 리팩토링입니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (83-84)
pendingTask와 nextCursor를 뷰모델의 private 프로퍼티로 선언하여 State와 내부 로직을 분리한 점은 훌륭합니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (132)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (157)
state.nextCursor 대신 nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (242)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (247)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (255)
state.nextCursor 대신 self.nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (259)
state.nextCursor 대신 self.nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (263)
state.nextCursor 대신 self.nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (267)
state.nextCursor 대신 self.nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (271)
state.nextCursor 대신 self.nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (288)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (292)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (302)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (305)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (310)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (357)
state.pendingTask 대신 pendingTask를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (363)
state.nextCursor 대신 self.nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoListViewModel.swift (366)
state.nextCursor 대신 self.nextCursor를 직접 참조하도록 변경하여 State와 내부 로직을 명확히 분리한 점이 좋습니다.
DevLog/Presentation/ViewModel/TodoManageViewModel.swift (12)
State 구조체에 Equatable을 채택하여 상태 변경 시 불필요한 업데이트를 방지하는 것은 성능 최적화에 기여합니다.
DevLog/Presentation/ViewModel/TodoManageViewModel.swift (41)
self.state != state 조건을 추가하여 실제 상태 변화가 있을 때만 state를 업데이트하도록 개선한 점은 Observable 객체의 효율적인 사용을 위한 좋은 패턴입니다.